<!DOCTYPE html>
<html lang="zh-cn">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">




<title>process | Miles`s</title>

<link rel="stylesheet" href="https://mada.gitee.io/notes//css/styles.css">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" 
integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>


<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/zenburn.min.css" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js" integrity="sha256-/BfiIkHlHoVihZdc6TFuj7MmJ0TWcWsMXkeDFwhi0zw=" crossorigin="anonymous"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="https://mada.gitee.io/notes//js/highlight.js"></script>






<div class="container">
    <nav class="navbar level">
      <div class="navbar-brand">
          <a class="nav-item" href="https://mada.gitee.io/notes/"><h1 class="title is-3">Miles`s</h1></a>
      </div>           
      <div class="navbar-menu has-text-centered is-active">
          <div class="navbar-end is-centered">
              
           </div>
      </div>
    </nav>
  </div>
<div class="container">
  <h2 class="subtitle is-6">June 21, 2016</h2>
  <h1 class="subtitle is-size-4-mobile is-size-3-desktop">process</h1>
  <div class="content">
    

<h3 id="process-对象">process 对象</h3>

<p><code>process</code> 对象是Node的一个全局对象，提供当前Node进程的信息。
它可以在脚本的任意位置使用，不必通过<code>require</code>命令加载。该对象部署了<code>EventEmitter</code>接口。</p>

<h4 id="进程信息">进程信息</h4>

<h5 id="退出码">退出码</h5>

<p>进程退出时，会返回一个整数值，表示退出时的状态。</p>

<ul>
<li>0 正常退出</li>
<li>1 发生未捕获错误</li>
<li>5 v8执行错误</li>
<li>8 不正确的参数</li>
<li>128+信号值。</li>
</ul>

<h4 id="属性">属性</h4>

<p>process对象提供一系列属性，用于返回系统信息</p>

<ul>
<li>process.argv 返回当前进程的命令行参数数组</li>
<li>process.env 返回一个对象，成员为当前shell的环境变量。 如<code>process.env.HOME</code></li>
<li>process.installPrefix node安装路径的前缀</li>
<li>process.pid 当前进程的进程号</li>
<li>process.platform 平台  Linux</li>
<li>process.title 默认值为 node</li>
<li>process.version Node 的版本</li>
</ul>

<h4 id="stdout-stdin-stderr">stdout stdin stderr</h4>

<h5 id="stdout">stdout</h5>

<ol>
<li>stdout
指向标准输出。
process.stdout.write(&lsquo;message\n&rsquo;) 等同于console.log</li>
<li>stdin 标准输入
process.stdin.pipe(process.stdout)
标准输入导入到标准输出</li>
<li>stderr 指向标准错误</li>
</ol>

<h4 id="argv-execpath-execargv">argv, execPath, execArgv</h4>

<p><code>argv</code>: 返回一个数组，由命令行脚本时的各个参数组成。
第一个成员总是node
第二个成员是脚本文件名
其余来自脚本文件的参数</p>

<p><code>execPath</code>: 返回当前执行脚本的Node二进制文件的绝对路径。</p>

<p><code>execArgv</code>: 返回一个数组，成员在命令行下执行脚本时，在node可执行文件与脚本文件之间的命令行参数。</p>

<h4 id="process-env">process.env</h4>

<p>返回一个对象，包含了当前shell的所有环境变量。</p>

<h4 id="process-对象提供的方法">process 对象提供的方法</h4>

<ul>
<li>process.chdir() 切换工作目录到指定目录</li>
<li>process.cwd() 返回当枪脚本的工作目录的路径</li>
<li>process.exit() 退出当前进程。</li>
<li>process.getgid() 返回当前进程的组id</li>
<li>process.getuid() 用户id（数组）</li>
<li>process.nextTick() 指定回调函数在当前执行栈的尾部，下一次event loop之前执行</li>
<li>process.on() 监听事件</li>
<li>process.setgid() 指定当前进程的组</li>
<li>process.setuid() 指定当前进程的用户</li>
</ul>

<h5 id="proess-exit">proess.exit()</h5>

<p>退出当前进程
触发exit 事件</p>

<h5 id="process-on">process.on()</h5>

<p>监听各种事件，并指定回调函数</p>

<pre><code>	process.on('uncaughtException', function(err){
    	console.log('got an error %s', err.message)
        process.exit(1)
    })
</code></pre>

<p>process 支持的事件有以下yixie</p>

<ul>
<li>data事件： 数据输出输入时触发</li>
<li>SIGINT事件： 接收到系统信号时触发</li>
</ul>

<pre><code>	process.on('SIGINT', function(){
    	console.log('Got a SINGNT.')
        process.exit(0)
    })
</code></pre>

<p>使用时，向该进程发出系统信号，就会导致进程退出
<code>kill -s SIGINT [process_id]</code></p>

<p>SIGTERM信号表示内核要求当前进程停止，进程可以自行停止，也可以忽略这个信号。</p>

<pre><code>	process.on('SIGTERM', function(){
    	server.close(function(){
	        process.exit(0)
        })
    })
</code></pre>

<p>进程不会立马退出，而是执行完回调之后再退出</p>

<h4 id="事件">事件</h4>

<h5 id="exit事件">exit事件</h5>

<p>当前进程退出时，触发 exit 事件</p>

<pre><code>	process.on('exit', function(){
    	fs.writeFileSync('/tmp/myfile', '需要保存到硬盘')
    })
</code></pre>

<p>回调函数只能执行同步操作，不能包含异步操作，因为执行完回调函数之后，进程立马退出。</p>

<h5 id="beforeexit">beforeExit</h5>

<p>在node清空了eventloop之后，再没有任何任务时，给的最后一次机会，使得node进程不退出。</p>

<p>主要区别 exit</p>

<p>可以部署异步操作</p>

<p>如果未发生捕获错误，或者显式终止程序，则不触发beforeExit</p>

<h4 id="uncaughtexception">uncaughtException</h4>

<p>当进程抛出一个未捕获的错误时触发</p>

<h4 id="信号事件">信号事件</h4>

  </div>
</div>
<div class="container has-text-centered">
    
</div>

<div class="container has-text-centered">
  
</div>
<section class="section">
  <div class="container has-text-centered">
    <p></p>
  </div>
</section>


